try to detect if naming rules are enabled on server before auto rename
authorMatthieu Gallien <matthieu.gallien@nextcloud.com>
Wed, 12 Feb 2025 17:48:47 +0000 (18:48 +0100)
committerbackportbot[bot] <backportbot[bot]@users.noreply.github.com>
Wed, 19 Feb 2025 13:12:36 +0000 (13:12 +0000)
Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
src/libsync/discoveryphase.h
src/libsync/syncengine.cpp

index 3382ffc1315e7a2aab353534f3e3cf139bff22f8..855758b1f9047d149586a7c8b54b03a0f200e0d4 100644 (file)
@@ -343,6 +343,11 @@ public:
 
     QStringList _listExclusiveFiles;
 
+    QStringList _forbiddenFilenames;
+    QStringList _forbiddenBasenames;
+    QStringList _forbiddenExtensions;
+    QStringList _forbiddenChars;
+
     bool _hasUploadErrorItems = false;
     bool _hasDownloadRemovedItems = false;
 
index d5018149b31c82a7279abeaeb84b591d5a048c79..25e6bf414782f982da7fc68e5ba1cf6d93085444 100644 (file)
@@ -647,7 +647,6 @@ void SyncEngine::startSync()
 
     _discoveryPhase = std::make_unique<DiscoveryPhase>();
     _discoveryPhase->_leadingAndTrailingSpacesFilesAllowed = _leadingAndTrailingSpacesFilesAllowed;
-    _discoveryPhase->_shouldEnforceWindowsFileNameCompatibility = _shouldEnforceWindowsFileNameCompatibility;
     _discoveryPhase->_account = _account;
     _discoveryPhase->_excludes = _excludedFiles.data();
     const QString excludeFilePath = _localPath + QStringLiteral(".sync-exclude.lst");
@@ -672,6 +671,24 @@ void SyncEngine::startSync()
         return;
     }
 
+    const auto accountCaps = _account->capabilities();
+    const auto forbiddenFilenames = accountCaps.forbiddenFilenames();
+    const auto forbiddenBasenames = accountCaps.forbiddenFilenameBasenames();
+    const auto forbiddenExtensions = accountCaps.forbiddenFilenameExtensions();
+    const auto forbiddenChars = accountCaps.forbiddenFilenameCharacters();
+
+    _discoveryPhase->_forbiddenFilenames = forbiddenFilenames;
+    _discoveryPhase->_forbiddenBasenames = forbiddenBasenames;
+    _discoveryPhase->_forbiddenExtensions = forbiddenExtensions;
+    _discoveryPhase->_forbiddenChars = forbiddenChars;
+    if (!forbiddenFilenames.isEmpty() &&
+        !forbiddenBasenames.isEmpty() &&
+        !forbiddenExtensions.isEmpty() &&
+        !forbiddenChars.isEmpty()) {
+        _shouldEnforceWindowsFileNameCompatibility = true;
+        _discoveryPhase->_shouldEnforceWindowsFileNameCompatibility = _shouldEnforceWindowsFileNameCompatibility;
+    }
+
     // Check for invalid character in old server version
     QString invalidFilenamePattern = _account->capabilities().invalidFilenameRegex();
     if (invalidFilenamePattern.isNull()